javascript clean-code
コードを読みやすくすることに命をかける
変数名には意味のある発音可能な名前をつけなさい
同じような種類のコードには同じような名前をつけなさい
マジックナンバーには名前をつけなさい(数値などの値をそのままハードコーディングせずに名前をつける)
解読しにくいなら、中間変数を利用しなさい
仮名ではなく、ちゃんとした名前をつけなさい
親の名前空間を無闇にプロパティ名にも利用する必要はない
ブロック内で短絡・条件式を利用するくらいなら、デフォルト引数を使いなさい
否定条件は避けなさい。直感的にわかりにくい。
最適化に気を取られすぎない。本当にボトルネックになってるとこだけ見つけて最適化する
デッドコードを残さない
関数は上から下に使う順に書くと綺麗になる
コメントは意図を残すためにあり、補足のためにあるのではない
位置マーカーの利用は避ける
関数作成における考え方
関数名はちゃんと処理内容を表すようにしなさい
副作用処理には細心の注意を払い、できるだけ入れない or 切り出すようにする
副作用(値を受け取り加工して返す以外の処理)はできるだけ避ける
副作用を使う必要がある場合、その処理だけのサービスを作る
受け取ったオブジェクトを直接変更するのではなく、コピーしてから返す関数にしなさい
関数型言語っぽい書き方が使えるなら使うことを推奨します
メソッドチェーンを使って、インスタンスの利用をよりクリーンにしなさい
変更の影響範囲を狭める
グローバルオブジェクトの利用は禁止。絶対に他と衝突が起きてバグの原因になる
プロパティの直接利用を禁じて、getter/setterなどを利用してカプセル化を表現しなさい
エラーコードを返すのではなく、ちゃんとthrowしなさい
その他
javascriptで型チェックを行いたいなら、素直にTypeScriptを利用しなさい
q.icon「副作用」に注意する理由がイマイチ掴めない
a.icon処理が追いにくくなるので、副作用は使わない方がいい。
関数ってのは入力を受け取って出力するってのが一番シンプル、何をしてるのかが分かりやすい。
副作用が入ってしまうと、入力と出力に表れない変更処理が紛れ込んでしまい、何をしてるのかを後から読む人間が把握しにくくなってしまう。
入力と出力だけを忠実にやってるなら、後から読む人間は一瞬で何してるか把握できる。副作用の心配をしなくていい。
副作用処理があると、変更時などに思わぬ影響に悩まされることになるでしょう。
その影響に怯えて、全然変更できないってこともめっちゃあると思う。
変更しやすいシステムに求められるのは「何してるのかが簡単にわかる」ってこと
参考
javascript clean-code-javascript(日本語訳)を読む